/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sw2asteriskjava;

import AsteriskBean.BCdr;
import AsteriskDao.AsteriskManager;
import conn.dao.DLinea;
import conn.dao.DLlamada;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.asteriskjava.manager.ManagerConnection;
import org.asteriskjava.manager.ManagerEventListener;
import org.asteriskjava.manager.event.CdrEvent;
import org.asteriskjava.manager.event.ManagerEvent;
import org.asteriskjava.manager.event.NewChannelEvent;

/**
 *
 * @author root */

public class HiloWorker extends Thread implements ManagerEventListener {

    private int flag=0;
    private String CdrId;
    private boolean faltanLlamadas=true;
    private Integer idCampana;

    public HiloWorker(){
          
    }

    @Override
    public void run(){

        /*EL HILO ESTA EN UN BUCLE INFINITO HASTA QUE NO QUEDEN LLAMADAS*/
        while (faltanLlamadas){
            /*CUANDO EL FLAG SE ACTIVA, SE PUEDE TRABAJAR EN BD*/
            if (getFlag()!=0){
                //TRABAJAR EN LA BASE DE DATOS;
                actualizarDatosBD(CdrId);
                
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(HiloWorker.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    public void onManagerEvent(ManagerEvent event) {
        /*Cuando se llegue a invocar este es porque
         * acabo una llamada y el servidor envio el CDR
         */

        /*SI SE GRABO UN CDR, SE CAMBIA EL FLAG PARA ENTRAR AL ACTUALIZARDATOSBD*/
        if (event instanceof CdrEvent) {
            CdrId=((CdrEvent) event).getUniqueId();
            idCampana = Integer.valueOf(((CdrEvent) event).getAccountCode());
            setFlag(1);
        }
        if (event instanceof NewChannelEvent){
        }
        //System.out.println("Llego el evento :"+ event.getClass());

    }

    /*FALTA: ACTUALIZAR LOS DATOS EN BD USANDO EL CDR QUE SE LES DA*/
    public void actualizarDatosBD(String CdrID){

       AsteriskManager asteriskManager=new AsteriskManager();
       DLlamada llamada=new DLlamada();
       DLinea linea=new DLinea();
       BCdr bcdr = asteriskManager.getCdr(CdrID);
       String idLinea=linea.getidlinea(bcdr.getDestino());
       llamada.nuevallamada(bcdr,this.idCampana,idLinea);
        System.out.println("Actualizando datos en BD, con CDR :"+ CdrId);
        setFlag(0);
    }


    public int getFlag() {
        return flag;
    }

    public void setFlag(int flag) {
        this.flag = flag;
    }

    public boolean isFaltanLlamadas() {
        return faltanLlamadas;
    }

    public void setFaltanLlamadas(boolean faltanLlamadas) {
        this.faltanLlamadas = faltanLlamadas;
    }

    public Integer getIdCampana() {
        return idCampana;
    }

    public void setIdCampana(Integer idCampana) {
        this.idCampana = idCampana;
    }


}
